#include <iostream>
#include <ostream>
struct ListNode {
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
 };


// 迭代
// 时间复杂度：O(n)
// 空间复杂度：O(1)
void printListIter(ListNode* head) {
    while (head != nullptr) {
        std::cout << head->val << std::endl;
        head = head->next;
    }
}

// 递归
void printList(ListNode* head) {
    if (head == nullptr) return;
    std::cout << head->val << std::endl;
    printList(head->next);
}